﻿// 3600. 最大的两个数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using namespace std;
/*
https://www.acwing.com/problem/content/3603/


输入一个四行五列的矩阵，找出每列最大的两个数。

输入格式
四行每行包括五个整数。

代表一个四行五列的矩阵，矩阵元素全部是整数。

输出格式
输出一个两行五列的矩阵，第 i 列的两个数是原矩阵中第 i列最大的两个数，
如果最大的两个数中的一个数在这一列中有多个相同的值，则行值取行值小的那一个。

输出时要保留原矩阵的行列顺序，即在原矩阵中行值小的，在输出矩阵中的行值依然小。

数据范围
矩阵元素取值范围 [−100,100]
输入样例：
1 2 4 9 8
-1 4 9 8 8
12 9 8 7 0
7 8 9 7 0
输出样例：
12 9 9 9 8
7 8 9 8 8
*/

const int N = 10;
int matrix[N][N];
int n = 4, m = 5;

int ans[2][5];

int main()
{
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> matrix[i][j];
		}
	}

	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 5; j++) {
			ans[i][j] = -9999999;
		}
	}
 
	for (int j = 0; j < m; j++) {
		for (int i = 0; i < n; i++) {
			//cout << matrix[i][j] << " ";
			if (ans[0][j] == -9999999) {
				ans[0][j] = matrix[i][j];
			}
			else if (ans[1][j] == -9999999) {
				ans[1][j] = matrix[i][j];
			}
			else if (matrix[i][j] > ans[0][j] && matrix[i][j] > ans[1][j]) {
				ans[0][j] = max(ans[0][j], ans[1][j]);
				ans[1][j] = matrix[i][j];
			}
			else if (matrix[i][j] > ans[0][j]) {
				swap(ans[0][j], ans[1][j]);
				ans[1][j] = matrix[i][j];
			}
			else if (matrix[i][j] > ans[1][j]) {
				ans[1][j] = matrix[i][j];
			}
		}
	}

	for (int i = 0; i < m; i++) {
		cout << ans[0][i] << " ";
	}
	cout << endl;
	for (int i = 0; i < m; i++) {
		cout << ans[1][i] << " ";
	}
	cout << endl;

}

 